package com.example.edianzu.somur;

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Vibrator;
import android.support.multidex.MultiDex;

import com.example.edianzu.somur.utils.cache.FileUtil;
import com.example.edianzu.somur.utils.content.L;
import com.medica.buttonsdk.bluetooth.ButtonHelper;
import com.umeng.analytics.MobclickAgent;

import cn.jpush.android.api.JPushInterface;

/**
 * author：风不会停息 on 2017/7/13 11:22
 * mailbox：yh131412hys@163.com
 * project：Somur
 * tel：13295355900
 * describe：
 */

public class App extends Application{

    public static App app;
    private SharedPreferences sharedPreferences;
    private ButtonHelper buttonHelper;

    public static boolean IS_EXIST_SDCARD;
    public static String CACHE_DIR_SD;      //SD卡缓存目录
    public static String CACHE_DIR_SYSTEM;  //系统目录
    public static String IMAGE_DIR;         //图片目录
    public static String FILE_DIR;          //文件目录
    public static String NET_REQUEST_DIR;   //网络请求目录
    public static boolean IS_LOGIN = true;
    public Vibrator mVibrator;


    public SharedPreferences getSharedPreferences() {
        return sharedPreferences;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        /*JPushInterface.resumePush(getApplicationContext());//接收，可以再任意处设置
        JPushInterface.stopPush(getApplicationContext());//不接收  */

//        初始化极光推送
        JPushInterface.setDebugMode(true);
        JPushInterface.init(this);


//        友盟统计
        /*构造意义：
    String appkey:官方申请的Appkey
    String channel: 渠道号
    EScenarioType eType: 场景模式，包含统计、游戏、统计盒子、游戏盒子
    Boolean isCrashEnable: 可选初始化. 是否开启crash模式
    */
//        MobclickAgent.startWithConfigure(new MobclickAgent.UMAnalyticsConfig(this,"",""));
        /*如果enable为true，SDK会对日志进行加密。加密模式可以有效防止网络攻击，提高数据安全性。
    如果enable为false，SDK将按照非加密的方式来传输日志。
    如果您没有设置加密模式，SDK的加密模式为false（不加密）。*/
        MobclickAgent.enableEncrypt(true);//6.0.0版本及以后
//        友盟统计调试
        MobclickAgent.setDebugMode(true);

//        初始化纽扣通信工具类ButtonHelper
        buttonHelper = ButtonHelper.getInstance(this);

        //初始化缓存目录的配置
        initCache();

        app=this;

        sharedPreferences = getSharedPreferences("userInfo", MODE_PRIVATE);
    }

    private void initCache() {

        if (FileUtil.isExistSD()) {
            //SD存在
            CACHE_DIR_SD = FileUtil.getCacheDirectory(this);
            IS_EXIST_SDCARD = true;
        } else {
            //不存在则使用系统目录
            CACHE_DIR_SD = this.getCacheDir().getPath();
        }
        CACHE_DIR_SD += "/";
        L.e("----SD卡目录---->>>:" + CACHE_DIR_SD);
        IMAGE_DIR = CACHE_DIR_SD + "image/";
        FILE_DIR = CACHE_DIR_SD + "file/";
        NET_REQUEST_DIR = CACHE_DIR_SD + "request/";
        CACHE_DIR_SYSTEM = this.getCacheDir().getPath() + "file/";

        FileUtil.checkDir(CACHE_DIR_SD, IMAGE_DIR,
                FILE_DIR, NET_REQUEST_DIR, CACHE_DIR_SYSTEM);
        L.e(IMAGE_DIR + "\n" + NET_REQUEST_DIR + "\n" + FILE_DIR);
    }

    /**
     * onConfigurationChanged实际对应的是Activity里的onConfigurationChanged()方法。
     * 在AndroidManifest.xml中添加上诉代码的含义是表示在改变屏幕方向、弹出软件盘和隐藏软键盘时，
     * 不再去执行onCreate()方法，而是直接执行onConfigurationChanged()。
     * 如果不申明此段代码，按照Activity的生命周期，都会去执行一次onCreate()方法，
     *
     * @param newConfig
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }

    /**
     * 在系统内存不足，所有后台程序（优先级为background的进程，不是指后台运行的进程）都被杀死时，
     * 系统会调用OnLowMemory。
     */
    @Override
    public void onLowMemory() {
        super.onLowMemory();
    }

    /**
     * 系统会根据不同的内存状态来回调。
     * 根据不同的内存状态，来响应不同的内存释放策略。
     */
    @Override
    public void onTerminate() {
        super.onTerminate();
    }

    public static App getApp() {
        return app;
    }

    public ButtonHelper getButtonHelper() {
        return buttonHelper;
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
